home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
libs
/
usergrouplib.lha
/
usergroup
/
make_fd.awk
< prev
next >
Wrap
Text File
|
1992-09-02
|
6KB
|
246 lines
# Hey Emacs! This file might as well be -*- C -*-
#
# make_fd.awk -- create prototype, FD and pragma files
#
# Author: ppessi <Pekka.Pessi@hut.fi>
#
# Copyright © 1993, 1994 AmiTCP/IP Group, <AmiTCP-Group@hut.fi>
# Helsinki University of Technology, Finland.
#
# Created : Mon Nov 29 21:14:58 1993 ppessi
# Last modified: Sat Feb 12 02:57:44 1994 ppessi
#
# $Id: make_fd.awk,v 1.4 1994/02/17 02:23:05 ppessi Exp $
#
# $Log: make_fd.awk,v $
# Revision 1.4 1994/02/17 02:23:05 ppessi
# Changed the defines for include files
#
# Revision 1.3 1994/01/21 08:32:32 ppessi
# Added a "what" variable to determine the conversion result
#
# Revision 1.2 1994/01/21 05:00:16 ppessi
# Fancier blurbs.
#
#
#
# Each prototype must in the form
# ASM type name(REG(rn) type name);
# Do not forget argument name!
# The tagcall stub must be given in the next line of
# /* TAGCALL tag_call_stub_name */
#
BEGIN {
stderr = "console:";
if (what != "protos" && what != "pragmas" && what != "fd") {
print "but what to do?" > stderr;
exit(10);
}
library = "usergroup";
basename = "UserGroupBase";
fds = "fd/"library"_lib.fd";
pragmaname = "pragmas/"library"_pragmas.h"
pragmas = "include/"pragmaname;
outputname = "clib/"library"_protos.h";
define = toupper(outputname);
gsub("[/.]", "_", define);
output = "include/"outputname;
libprefix = "^R_";
libfunctype = "^ASM$";
libincludename = "libraries/"library".h";
libincludedefine = toupper(libincludename);
gsub("[/.]", "_", libincludedefine);
libinclude = "include/"libincludename;
libincludename1 = "pwd.h";
libincludedefine1 = toupper(libincludename1);
gsub("[/.]", "_", libincludedefine1);
libincludename2 = "grp.h";
libincludedefine2 = toupper(libincludename2);
gsub("[/.]", "_", libincludedefine2);
copyright = \
"**\tCopyright (c) 1993 AmiTCP/IP Group, <AmiTCP-Group@hut.fi>\n"\
"**\t Helsinki University of Technology, Finland.\n"\
"**\t All rights reserved.\n";
state = 0;
priv = 1;
public = 2;
release="$Release$";
rcsdate="$Date: 1994/02/17 02:23:05 $";
}
state == 0 && $0 ~ /\$Date/ {
rcsdate = $0;
sub(/^[^$]*/, "", rcsdate);
sub(/[^$]*$/, "", rcsdate);
}
state == 0 && $0 ~ /\$Revision/ {
rcsid = $0;
sub(/^[^$]*/, "", rcsid);
sub(/[^$]*$/, "", rcsid);
fnfmt = "**\t$Filename: %s $\n";
rcsfmt = "**\t%s\n";
if (what == "protos") {
protosblurb="**\n**\tC prototypes for %s.library\n**\n";
printf("#ifndef %s\n", define);
printf("#define %s\n", define);
printf("/*\n");
printf(fnfmt, outputname );
printf(rcsfmt, release);
printf(rcsfmt, rcsid);
printf(rcsfmt, rcsdate);
printf(protosblurb, library);
printf(copyright);
printf("*/\n");
printf("\n#ifndef %s\n#include \<%s\>\n#endif\n",
libincludedefine, libincludename);
printf("\n#ifndef %s\n#include \<%s\>\n#endif\n",
libincludedefine1, libincludename1);
printf("\n#ifndef %s\n#include \<%s\>\n#endif\n",
libincludedefine2, libincludename2);
} else if (what == "pragmas") {
pragmablurb="**\n**\tPragmas file for %s.library\n**\n";
printf("/*\n");
printf(fnfmt, pragmaname );
printf(rcsfmt, release);
printf(rcsfmt, rcsid);
printf(rcsfmt, rcsdate);
printf(pragmablurb, library);
printf(copyright);
printf("*/\n");
} else if (what == "fd") {
fdblurb="**\n**\tFD file for %s.library\n**\n";
printf("**\n");
printf(fnfmt, fds );
printf(rcsfmt, release);
printf(rcsfmt, rcsid);
printf(rcsfmt, rcsdate);
printf(fdblurb, library);
printf(copyright);
printf("**\n");
printf("##base _%s\n##bias 30\n##public\n", basename);
}
base = 30;
state = public;
next;
}
state != 0 && $1 ~ libfunctype {
if (!match($0, /[A-Za-z][A-Za-z0-9_]*\(/)) {
printf("$0: No function name") >stderr;
exit 1;
}
fname = substr($0, RSTART, RLENGTH - 1);
sub(libprefix, "", fname);
rtype = substr($0, 1, RSTART - 1);
sub(/^[^ ]* */, "", rtype);
registerless = rtype""fname"(";
arglist = $0;
argnames = ""; reglist = ""; twoline = 0;
sub(/^[^(]*\(/, "", arglist);
sub(/\)[^)]*$/, "", arglist);
argn = split(arglist, args, ",");
if (argn != 1 || args[1] !~ "^void$") {
pragmacode = sprintf("%02X", argn);
for (i = 1; i < argn + 1; i++) {
sub(/ */, "", args[i]);
apn = split(args[i], ap, "[ *]+");
if (match(ap[1], /^REG\(d[0-7]\)$/)) {
pragmacode = sprintf("%X%s", substr(ap[1], 6, 1), pragmacode);
} else if (match(ap[1], /^REG\(a[0-7]\)$/)) {
pragmacode = sprintf("%X%s", substr(ap[1], 6, 1) + 8, pragmacode);
} else {
printf("%s: argument %s has no register\n", fname, ap[apn]) > stderr;
exit 1;
}
argnames=argnames""ap[apn];
reglist=reglist""substr(ap[1], 5, 2);
sub(/^REG\(..\) */, "", args[i]);
lastrl = registerless;
if (!twoline && length(registerless""args[i]) > 76) {
twoline = 1;
registerless=registerless"\n ";
}
registerless = registerless""args[i]
if (i < argn) {
argnames = argnames", ";
reglist = reglist"/";
registerless = registerless", ";
}
}
} else {
registerless = registerless"void";
pragmacode = "00";
}
if (what == "protos") {
printf("%s);\n", registerless);
} else if (what == "pragmas") {
printf("#pragma libcall %s %s %X %s\n",
basename, fname, base, pragmacode);
} else if (what == "fd") {
printf("%s(%s)(%s)\n", fname, argnames, reglist);
}
base += 6;
next;
}
state != 0 && $1 ~ /^\/\*$/ && $2 == "TAGCALL" {
sub(fname, $3, lastrl);
if (what == "protos") {
printf("%s ...);\n", lastrl);
} else if (what == "pragmas") {
printf("#pragma tagcall %s %s %X %s\n",
basename, $3, base - 6, pragmacode);
}
next;
}
state != 0 && $1 ~ /^\/\*$/ {
if (what == "protos") {
printf "%s\n", $0;
} else if (what == "pragmas") {
printf "%s\n", $0;
} else if (what == "fd") {
sub(/\/\*/, "*------", $0);
sub(/\*\//, "------*", $0);
print $0;
}
next;
}
state != 0 {
if (what == "protos") {
print $0;
}
}
END {
if (what == "protos") {
printf("\n#endif /* %s */\n", define);
} else if (what == "fd") {
printf("##end\n")
}
}